home *** CD-ROM | disk | FTP | other *** search
/ Retro Gamer 17 / Retro Gamer 17.iso / 2D Shooters / install_hor.exe / thepcsprite.h < prev    next >
Encoding:
C/C++ Source or Header  |  2003-11-18  |  6.3 KB  |  150 lines

  1.  
  2. struct thepcsprite {
  3.     int x, y, oldx, oldy, curframe, dir, accel, h, w, hp, lives, weapon;
  4.     int movedelay, breakdelay, offset, speed, animdelay;
  5.     Uint32 lastmove, lastdrawn;
  6.     SDL_Surface *ani0, *ani1, *ani2;
  7.     SDL_Surface *anil0, *anil1, *anil2;
  8.     SDL_Surface *anir0, *anir1, *anir2;
  9.     SDL_Surface *buf;
  10.     };
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18. void movepc (thepcsprite *pc, int dir) {
  19.     Uint32 curtime= SDL_GetTicks();
  20.     if(curtime - pc->lastmove > pc->movedelay) {
  21.         if (dir == UP   ) pc->y-=pc->speed;
  22.         if (dir == DOWN ) pc->y+=pc->speed;
  23.         if (dir == LEFT ) pc->x-=pc->speed;
  24.         if (dir == RIGHT) pc->x+=pc->speed;
  25.         if (dir == UPLEFT   ) { pc->y-=pc->speed; pc->x-=pc->speed; }
  26.         if (dir == UPRIGHT  ) { pc->y-=pc->speed; pc->x+=pc->speed; }
  27.         if (dir == DOWNLEFT ) { pc->y+=pc->speed; pc->x-=pc->speed; }
  28.         if (dir == DOWNRIGHT) { pc->y+=pc->speed; pc->x+=pc->speed; }
  29.         if (pc->speed < 15) {
  30.             pc->speed+=1;
  31.             }
  32.         if (pc->y > 536) pc->y= 536;
  33.         if (pc->x > 536) pc->x= 536;
  34.         if (pc->y < 0 ) pc->y= 0;
  35.         if (pc->x < 0 ) pc->x= 0;
  36.         pc->lastmove= curtime-((curtime - pc->lastmove) - pc->movedelay);
  37.         }
  38.     }
  39.  
  40. void initpc (thepcsprite *pc, SDL_Surface *screen) {
  41.  
  42.     pc->x=300; pc->y=500; pc->oldx=300; pc->oldy=500; pc->curframe=0; pc->dir=0;
  43.     pc->movedelay= 16; pc->lastmove= 0; pc->speed=1; pc->accel=1; pc->lastdrawn=0;
  44.     pc->hp= 5; pc->lives= 3; pc->weapon= 1;
  45.     pc->h=64; pc->w=64;
  46.     pc->animdelay= 100;
  47.     SDL_Surface *tsurf;
  48.     tsurf= SDL_LoadBMP("data\\ship0.bmp");
  49.     pc->ani0= SDL_ConvertSurface(tsurf, tsurf->format, SDL_HWSURFACE);
  50.     SDL_SetColorKey(pc->ani0, SDL_SRCCOLORKEY, SDL_MapRGB(pc->ani0->format, 0,0,0));
  51.     tsurf= SDL_LoadBMP("data\\ship1.bmp");
  52.     pc->ani1= SDL_ConvertSurface(tsurf, tsurf->format, SDL_HWSURFACE);
  53.     SDL_SetColorKey(pc->ani1, SDL_SRCCOLORKEY, SDL_MapRGB(pc->ani1->format, 0,0,0));
  54.     tsurf= SDL_LoadBMP("data\\ship2.bmp");
  55.     pc->ani2= SDL_ConvertSurface(tsurf, tsurf->format, SDL_HWSURFACE);
  56.     SDL_SetColorKey(pc->ani2, SDL_SRCCOLORKEY, SDL_MapRGB(pc->ani2->format, 0,0,0));
  57.     tsurf= SDL_LoadBMP("data\\shipl0.bmp");
  58.     pc->anil0= SDL_ConvertSurface(tsurf, tsurf->format, SDL_HWSURFACE);
  59.     SDL_SetColorKey(pc->anil0, SDL_SRCCOLORKEY, SDL_MapRGB(pc->anil0->format, 0,0,0));
  60.     tsurf= SDL_LoadBMP("data\\shipl1.bmp");
  61.     pc->anil1= SDL_ConvertSurface(tsurf, tsurf->format, SDL_HWSURFACE);
  62.     SDL_SetColorKey(pc->anil1, SDL_SRCCOLORKEY, SDL_MapRGB(pc->anil1->format, 0,0,0));
  63.     tsurf= SDL_LoadBMP("data\\shipl2.bmp");
  64.     pc->anil2= SDL_ConvertSurface(tsurf, tsurf->format, SDL_HWSURFACE);
  65.     SDL_SetColorKey(pc->anil2, SDL_SRCCOLORKEY, SDL_MapRGB(pc->anil2->format, 0,0,0));
  66.     tsurf= SDL_LoadBMP("data\\shipr0.bmp");
  67.     pc->anir0= SDL_ConvertSurface(tsurf, tsurf->format, SDL_HWSURFACE);
  68.     SDL_SetColorKey(pc->anir0, SDL_SRCCOLORKEY, SDL_MapRGB(pc->anir0->format, 0,0,0));
  69.     tsurf= SDL_LoadBMP("data\\shipr1.bmp");
  70.     pc->anir1= SDL_ConvertSurface(tsurf, tsurf->format, SDL_HWSURFACE);
  71.     SDL_SetColorKey(pc->anir1, SDL_SRCCOLORKEY, SDL_MapRGB(pc->anir1->format, 0,0,0));
  72.     tsurf= SDL_LoadBMP("data\\shipr2.bmp");
  73.     pc->anir2= SDL_ConvertSurface(tsurf, tsurf->format, SDL_HWSURFACE);
  74.     SDL_SetColorKey(pc->anir2, SDL_SRCCOLORKEY, SDL_MapRGB(pc->anir2->format, 0,0,0));
  75.  
  76.     pc->buf = SDL_ConvertSurface(tsurf, tsurf->format, SDL_HWSURFACE | SDL_HWACCEL | SDL_HWPALETTE);
  77.     SDL_Rect dest;
  78.     dest.x= pc->x; dest.y= pc->y; dest.h= pc->h; dest.w= pc->w;
  79.     SDL_BlitSurface(screen, &dest, pc->buf, NULL);
  80.     SDL_FreeSurface(tsurf);
  81.     }
  82.  
  83. void drawpc (thepcsprite *pc, SDL_Surface *screen, int dir = NOMOVEMENT) {
  84.     SDL_Rect dest;
  85.     dest.x = pc->x; dest.y = pc->y;
  86.     dest.w = 64;    dest.h = 64;
  87. //    if ((pc->x != pc->oldx) || (pc->y != pc->oldy)) {
  88.  
  89. //        }
  90.     if( pc->curframe==0) {
  91.         if ((pc->dir == LEFT) || (pc->dir == UPLEFT) || (pc->dir == DOWNLEFT)) {
  92.             SDL_BlitSurface(pc->anil0, NULL, screen, &dest);
  93.             }
  94.         if ((pc->dir == RIGHT) || (pc->dir == UPRIGHT) || (pc->dir == DOWNRIGHT)) {
  95.             SDL_BlitSurface(pc->anir0, NULL, screen, &dest);
  96.             }
  97.         if ((pc->dir == UP) || (pc->dir == DOWN) || (pc->dir == NOMOVEMENT)) {
  98.             SDL_BlitSurface(pc->ani0, NULL, screen, &dest);
  99.             }
  100.         }
  101.     if( pc->curframe==1) {
  102.         if ((pc->dir == LEFT) || (pc->dir == UPLEFT) || (pc->dir == DOWNLEFT)) {
  103.             SDL_BlitSurface(pc->anil1, NULL, screen, &dest);
  104.             }
  105.         if ((pc->dir == RIGHT) || (pc->dir == UPRIGHT) || (pc->dir == DOWNRIGHT)) {
  106.             SDL_BlitSurface(pc->anir1, NULL, screen, &dest);
  107.             }
  108.         if ((pc->dir == UP) || (pc->dir == DOWN) || (pc->dir == NOMOVEMENT)) {
  109.             SDL_BlitSurface(pc->ani1, NULL, screen, &dest);
  110.             }
  111.         }
  112.     if( pc->curframe==2) {
  113.         if ((pc->dir == LEFT) || (pc->dir == UPLEFT) || (pc->dir == DOWNLEFT)) {
  114.             SDL_BlitSurface(pc->anil2, NULL, screen, &dest);
  115.             }
  116.         if ((pc->dir == RIGHT) || (pc->dir == UPRIGHT) || (pc->dir == DOWNRIGHT)) {
  117.             SDL_BlitSurface(pc->anir2, NULL, screen, &dest);
  118.             }
  119.         if ((pc->dir == UP) || (pc->dir == DOWN) || (pc->dir == NOMOVEMENT)) {
  120.             SDL_BlitSurface(pc->ani2, NULL, screen, &dest);
  121.             }
  122.         }
  123.  /*
  124.     if( pc->curframe==0) SDL_BlitSurface(pc->ani0, NULL, screen, &dest);
  125.     if( pc->curframe==1) SDL_BlitSurface(pc->ani1, NULL, screen, &dest);
  126.     if( pc->curframe==2) SDL_BlitSurface(pc->ani2, NULL, screen, &dest);
  127.  */
  128.     if( SDL_GetTicks() - pc->lastdrawn > pc->animdelay ) {
  129.         pc->curframe++;
  130.         pc->lastdrawn= SDL_GetTicks()-((SDL_GetTicks() - pc->lastdrawn)-pc->animdelay);
  131.         }
  132.     if( pc->curframe == 3 ) pc->curframe=0;
  133.     }
  134.  
  135. void clearpc (thepcsprite *pc, SDL_Surface *screen) {
  136.     SDL_Rect old;
  137. //    if ( (pc->x != pc->oldx ) || ( pc->y != pc->oldy) ) {
  138.         old.x= pc->oldx; old.y= pc->oldy; old.w= pc->w; old.h= pc->h;
  139.         SDL_BlitSurface(pc->buf, NULL, screen, &old);
  140. //       }
  141.     }
  142.  
  143. void bufferpc (thepcsprite *pc, SDL_Surface *screen) {
  144.     SDL_Rect old;
  145.     old.x= pc->x; old.y= pc->y;
  146.     SDL_BlitSurface(screen, &old, pc->buf, NULL);
  147.     pc->oldx = pc->x; pc->oldy = pc->y;
  148.     }
  149.  
  150.